From 95533845ba6b093b51b5ade1a9512ea77579bedb Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Wed, 16 Nov 2005 17:45:36 -0600 Subject: [PATCH] Changes so that Xen can be compiled with gcc 4.0.2: (by Tristan Gingold) * functions must be declared before being called. * a cast or a conditionnal expression is not an lvalue. * a function cannot be declared static and redeclared extern (or reverse). * gcc 4.0.2 missed a range optimization (ia64_setreg_unknown_kr). * ia64_ksyms is not used (removed from Makefile). * (added by Dan M: since now modified, move gfp.h from linux to linux-xen) --- xen/arch/ia64/Makefile | 6 +++--- xen/arch/ia64/vmx/mmio.c | 2 ++ xen/arch/ia64/vmx/vmmu.c | 12 ++++++++---- xen/arch/ia64/xen/vcpu.c | 3 +++ xen/include/asm-ia64/linux-xen/linux/README.origin | 1 + xen/include/asm-ia64/{ => linux-xen}/linux/gfp.h | 3 +++ xen/include/asm-ia64/linux-xen/linux/interrupt.h | 2 ++ xen/include/asm-ia64/linux/README.origin | 1 - xen/include/asm-ia64/mm.h | 2 +- xen/include/asm-ia64/vmmu.h | 5 ++++- xen/include/asm-ia64/vmx_vcpu.h | 2 ++ 11 files changed, 29 insertions(+), 10 deletions(-) rename xen/include/asm-ia64/{ => linux-xen}/linux/gfp.h (99%) diff --git a/xen/arch/ia64/Makefile b/xen/arch/ia64/Makefile index 08bc8aafe1..18c56db1c3 100644 --- a/xen/arch/ia64/Makefile +++ b/xen/arch/ia64/Makefile @@ -2,7 +2,7 @@ include $(BASEDIR)/Rules.mk VPATH = xen vmx linux linux-xen -OBJS = xensetup.o setup.o time.o irq.o ia64_ksyms.o process.o smp.o \ +OBJS = xensetup.o setup.o time.o irq.o process.o smp.o \ xenmisc.o acpi.o hypercall.o \ machvec.o dom0_ops.o domain.o hpsimserial.o pcdp.o \ idle0_task.o pal.o hpsim.o efi.o efi_stub.o ivt.o mm_contig.o \ @@ -10,7 +10,7 @@ OBJS = xensetup.o setup.o time.o irq.o ia64_ksyms.o process.o smp.o \ extable.o linuxextable.o sort.o xenirq.o xentime.o \ regionreg.o entry.o unaligned.o privop.o vcpu.o \ irq_ia64.o irq_lsapic.o vhpt.o xenasm.o hyperprivop.o dom_fw.o \ - grant_table.o sn_console.o + grant_table.o sn_console.o # ia64_ksyms.o OBJS += vmx_init.o vmx_virt.o vmx_vcpu.o vmx_process.o vmx_vsa.o vmx_ivt.o\ vmx_phy_mode.o vmx_utility.o vmx_interrupt.o vmx_entry.o vmmu.o \ @@ -45,7 +45,7 @@ asm-offsets.s: asm-offsets.c $(BASEDIR)/include/asm-ia64/.offsets.h.stamp $(BASE asm-xsi-offsets.s: asm-xsi-offsets.c $(CC) $(CFLAGS) -S -o $@ $< - + $(BASEDIR)/include/asm-ia64/asm-xsi-offsets.h: asm-xsi-offsets.s @(set -e; \ echo "/*"; \ diff --git a/xen/arch/ia64/vmx/mmio.c b/xen/arch/ia64/vmx/mmio.c index a64c16829c..b3668acb81 100644 --- a/xen/arch/ia64/vmx/mmio.c +++ b/xen/arch/ia64/vmx/mmio.c @@ -49,6 +49,8 @@ struct mmio_list *lookup_mmio(u64 gpa, struct mmio_list *mio_base) #define PIB_OFST_INTA 0x1E0000 #define PIB_OFST_XTP 0x1E0008 +static int write_ipi (VCPU *vcpu, uint64_t addr, uint64_t value); + static void pib_write(VCPU *vcpu, void *src, uint64_t pib_off, size_t s, int ma) { switch (pib_off) { diff --git a/xen/arch/ia64/vmx/vmmu.c b/xen/arch/ia64/vmx/vmmu.c index 99e50cc50b..07acfa3bd9 100644 --- a/xen/arch/ia64/vmx/vmmu.c +++ b/xen/arch/ia64/vmx/vmmu.c @@ -157,11 +157,13 @@ static thash_cb_t *init_domain_vhpt(struct vcpu *d) printk("Allocate domain vhpt at 0x%lx\n", (u64)vbase); memset(vbase, 0, VCPU_TLB_SIZE); vcur = (void*)((u64)vbase + VCPU_TLB_SIZE); - vhpt = --((thash_cb_t*)vcur); + vcur -= sizeof (thash_cb_t); + vhpt = vcur; vhpt->ht = THASH_VHPT; vhpt->vcpu = d; vhpt->hash_func = machine_thash; - vs = --((vhpt_special *)vcur); + vs -= sizeof (vhpt_special); + vs = vcur; /* Setup guest pta */ pta_value.val = 0; @@ -199,10 +201,12 @@ thash_cb_t *init_domain_tlb(struct vcpu *d) printk("Allocate domain tlb at 0x%lx\n", (u64)vbase); memset(vbase, 0, VCPU_TLB_SIZE); vcur = (void*)((u64)vbase + VCPU_TLB_SIZE); - tlb = --((thash_cb_t*)vcur); + vcur -= sizeof (thash_cb_t); + tlb = vcur; tlb->ht = THASH_TLB; tlb->vcpu = d; - ts = --((tlb_special_t *)vcur); + vcur -= sizeof (tlb_special_t); + ts = vcur; tlb->ts = ts; tlb->ts->vhpt = init_domain_vhpt(d); tlb->hash_func = machine_thash; diff --git a/xen/arch/ia64/xen/vcpu.c b/xen/arch/ia64/xen/vcpu.c index 9f2b0a186b..363d426c7f 100644 --- a/xen/arch/ia64/xen/vcpu.c +++ b/xen/arch/ia64/xen/vcpu.c @@ -147,6 +147,9 @@ void vcpu_load_kernel_regs(VCPU *vcpu) ia64_set_kr(7, VCPU(vcpu, krs[7])); } +/* GCC 4.0.2 seems not to be able to suppress this call!. */ +#define ia64_setreg_unknown_kr() return IA64_ILLOP_FAULT + IA64FAULT vcpu_set_ar(VCPU *vcpu, UINT64 reg, UINT64 val) { if (reg == 44) return (vcpu_set_itc(vcpu,val)); diff --git a/xen/include/asm-ia64/linux-xen/linux/README.origin b/xen/include/asm-ia64/linux-xen/linux/README.origin index 8e3c19698d..eb37456b88 100644 --- a/xen/include/asm-ia64/linux-xen/linux/README.origin +++ b/xen/include/asm-ia64/linux-xen/linux/README.origin @@ -6,5 +6,6 @@ # easily updated to future versions of the corresponding Linux files. cpumask.h -> linux/include/linux/cpumask.h +gfp.h -> linux/include/linux/gfp.h hardirq.h -> linux/include/linux/hardirq.h interrupt.h -> linux/include/linux/interrupt.h diff --git a/xen/include/asm-ia64/linux/gfp.h b/xen/include/asm-ia64/linux-xen/linux/gfp.h similarity index 99% rename from xen/include/asm-ia64/linux/gfp.h rename to xen/include/asm-ia64/linux-xen/linux/gfp.h index 7c7400137e..55d04c8ba1 100644 --- a/xen/include/asm-ia64/linux/gfp.h +++ b/xen/include/asm-ia64/linux-xen/linux/gfp.h @@ -1,6 +1,9 @@ #ifndef __LINUX_GFP_H #define __LINUX_GFP_H +#ifdef XEN +#include +#endif #include #include #include diff --git a/xen/include/asm-ia64/linux-xen/linux/interrupt.h b/xen/include/asm-ia64/linux-xen/linux/interrupt.h index b88e9457f1..1061b5e081 100644 --- a/xen/include/asm-ia64/linux-xen/linux/interrupt.h +++ b/xen/include/asm-ia64/linux-xen/linux/interrupt.h @@ -131,7 +131,9 @@ extern void open_softirq(int nr, void (*action)(struct softirq_action*), void *d extern void softirq_init(void); #define __raise_softirq_irqoff(nr) do { local_softirq_pending() |= 1UL << (nr); } while (0) extern void FASTCALL(raise_softirq_irqoff(unsigned int nr)); +#ifndef XEN extern void FASTCALL(raise_softirq(unsigned int nr)); +#endif /* Tasklets --- multithreaded analogue of BHs. diff --git a/xen/include/asm-ia64/linux/README.origin b/xen/include/asm-ia64/linux/README.origin index f715a93ab4..9daa422935 100644 --- a/xen/include/asm-ia64/linux/README.origin +++ b/xen/include/asm-ia64/linux/README.origin @@ -10,7 +10,6 @@ bitops.h ->linux/include/linux/bitops.h dma-mapping.h ->linux/include/linux/dma-mapping.h efi.h ->linux/include/linux/efi.h err.h ->linux/include/linux/err.h -gfp.h ->linux/include/linux/gfp.h initrd.h ->linux/include/linux/initrd.h jiffies.h ->linux/include/linux/jiffies.h kmalloc_sizes.h ->linux/include/linux/kmalloc_sizes.h diff --git a/xen/include/asm-ia64/mm.h b/xen/include/asm-ia64/mm.h index 7fac78db61..899f37b690 100644 --- a/xen/include/asm-ia64/mm.h +++ b/xen/include/asm-ia64/mm.h @@ -3,7 +3,7 @@ #include #ifdef LINUX_2_6 -#include +#include #endif #include #include diff --git a/xen/include/asm-ia64/vmmu.h b/xen/include/asm-ia64/vmmu.h index 5fe98c438d..ff68af1465 100644 --- a/xen/include/asm-ia64/vmmu.h +++ b/xen/include/asm-ia64/vmmu.h @@ -222,7 +222,10 @@ typedef struct thash_cb { #define ITR(hcb,id) ((hcb)->ts->itr[id]) #define DTR(hcb,id) ((hcb)->ts->dtr[id]) #define INVALIDATE_HASH(hcb,hash) { \ - INVALID_ENTRY(hcb, hash) = 1; \ + if ((hcb)->ht==THASH_TLB) \ + INVALID_TLB(hash) = 1; \ + else \ + INVALID_VHPT(hash) = 1; \ hash->next = NULL; } #define PURGABLE_ENTRY(hcb,en) 1 diff --git a/xen/include/asm-ia64/vmx_vcpu.h b/xen/include/asm-ia64/vmx_vcpu.h index 509e3732a6..2ac3532e38 100644 --- a/xen/include/asm-ia64/vmx_vcpu.h +++ b/xen/include/asm-ia64/vmx_vcpu.h @@ -71,7 +71,9 @@ extern thash_cb_t *vmx_vcpu_get_vtlb(VCPU *vcpu); extern thash_cb_t *vmx_vcpu_get_vhpt(VCPU *vcpu); extern ia64_rr vmx_vcpu_rr(VCPU *vcpu,UINT64 vadr); extern IA64FAULT vmx_vcpu_set_rr(VCPU *vcpu, UINT64 reg, UINT64 val); +#if 0 extern IA64FAULT vmx_vcpu_get_rr(VCPU *vcpu, UINT64 reg, UINT64 *pval); +#endif extern IA64FAULT vmx_vcpu_get_pkr(VCPU *vcpu, UINT64 reg, UINT64 *pval); IA64FAULT vmx_vcpu_set_pkr(VCPU *vcpu, UINT64 reg, UINT64 val); extern IA64FAULT vmx_vcpu_itc_i(VCPU *vcpu, UINT64 pte, UINT64 itir, UINT64 ifa); -- 2.30.2